
/**
 * @ Authors:
 * 
 * @Veronique De Laet
 * @Johan Willems
 * @Pierre Delaere
 * 
 * @version 2011
 */
package collections;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
import java.util.TreeSet;
import persistency.DatabaseToegang;

import model.Cursus;
import model.Inschrijving;
import model.ReportComponent;
import model.container.Cursussen;
import model.container.Inschrijvingen;

public class CursusHistoriekPerCusistenNummer extends ReportComponent{
	
	private static HashMap<String, Integer> lijst = new HashMap<String, Integer>();
	private DatabaseToegang db = new DatabaseToegang();
	private String databaseCommand;
	private ArrayList<String> dbLijst = new ArrayList<String>();
	
	/**
	 * Maak lijst met cursusCode en aantal inschrijvingen
	 * @param map
	 * @throws Exception 
	 */


	private HashMap<String, Integer> maakLijst(HashMap<String, Integer> map) throws Exception{

		for(Inschrijving inschrijving : Inschrijvingen.inschrijvingsLijst)
		{
		Inschrijving deInschrijving = inschrijving;
		int cursusCode = deInschrijving.getAangebodenCursus().getCursusCode();
		
			if (lijst.containsKey(cursusCode))
			{
				int count = lijst.get(cursusCode);//bepaal huidig aantal inschrijvingen voor die cursus
				lijst.put(geefCursusNaam(cursusCode), count+1); // voeg naam cursus + aantal inschrijvingen +1 toe
			}
			else
			{
				lijst.put(geefCursusNaam(cursusCode), 1);//voeg nieuwe cursusInschrijving toe en zet aantal op 1
			}
		}
		return lijst;
	}
	
	public void prtFactoryReport()
	{
		try {
			maakLijst(lijst);
		} catch (Exception e) {
			e.printStackTrace();
		}
		toonLijst(lijst);
	}
	private void toonLijst(HashMap <String, Integer> map) {
		Set <String> keys = lijst.keySet();
		TreeSet <String> sortedKeys = new TreeSet <String> (keys);
		
		System.out.println("De Lijst voor opdracht 1 bevat:\n");
		System.out.printf("%20s | %s","CursusNaam","Aantal Inschrijvingen\n");//print titel
		System.out.print("---------------------+----------------------\n");
/* Voor fs persistency		
		for(String key: sortedKeys)
		{
			System.out.printf("%20s | %s\n", key, lijst.get(key));//geef elke cursusCode en bijhorend aantal inschrijvingen
		}
*/
// voor DB persistency
		databaseCommand = "select  c.cursusnaam,count(*) from inschrijving i,cursus c ";
		databaseCommand += "where   i.aangebodenCursus = c.cursuscode group by c.cursusnaam";
		dbLijst = db.getFromDB(databaseCommand);
		for(String elementen : dbLijst)
		{
			String[] element = elementen.split(";");
			System.out.printf("%20s | %s\n", element[0], element[1]);//geef elke cursusCode en bijhorend aantal inschrijvingen
		}
	}
	
	private String geefCursusNaam(int aangebodenCursusCode) throws Exception
	{
		if(Cursussen.cursusLijst.containsKey(aangebodenCursusCode))
		{
		Cursus cursus = Cursussen.cursusLijst.get(aangebodenCursusCode);
		String cursusNaam = cursus.getCursusNaam();
		return cursusNaam;	
		}
		else
		{
			throw new Exception("Er bestaat geen cursus met de opgegeven cursus code");
		}
	}
}
